package presentation;


import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import metier.ArticleManager;
import metier.UtilisateurManager;
import modele.Utilisateur;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import utils.Utilitaire;


/**
 * Controller - Spring
 * 
 * @author Loiane Groner
 * http://loianegroner.com (English)
 * http://loiane.com (Portuguese)
 */
@Controller
public class ArticleController  {
	
	@RequestMapping(value="/articles/view.action")
	public @ResponseBody Map<String,? extends Object> view(@RequestParam("start") int start, @RequestParam("limit") int limit, String colFiltre, String valFiltre,String idCompteg,String idCatcompta,Model model,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List data	=	ArticleManager.getArticles(start,limit,colFiltre,valFiltre,((idCompteg)==null||(idCompteg=="")?0:Integer.parseInt(idCompteg)),((idCatcompta==null)||(idCatcompta=="")?0:Integer.parseInt(idCatcompta)));
				int total=data.size();
				return Utilitaire.getMap(data,1);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/familles/view.action")
	public @ResponseBody Map<String,? extends Object> viewFamille(@RequestParam("start") int start, @RequestParam("limit") int limit, String colFiltre, String valFiltre,Model model,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List data	=	ArticleManager.getFamilles(start,limit,colFiltre,valFiltre);
				int total=data.size();
				return Utilitaire.getMap(data,1);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/familletaxes/view.action")
	public @ResponseBody Map<String,? extends Object> viewFamilleTaxe(@RequestParam("fam") int idArticle, @RequestParam("famCatCompta") int famCatCompta, String colFiltre, String valFiltre,Model model,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List data	=	ArticleManager.getTaxeByFamilleAndCatcompta(idArticle,famCatCompta);
				int total=data.size();
				return Utilitaire.getMap(data,1);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/getlog.action")
	public @ResponseBody Map<String,? extends Object> testDemande(HttpSession session) throws Exception {
		String chaine = "";
		//lecture du fichier texte	
		try{
			InputStream ips=new FileInputStream(System.getProperty("user.dir")+"/monlogfile.txt"); 
			InputStreamReader ipsr=new InputStreamReader(ips);
			BufferedReader br=new BufferedReader(ipsr);
			String ligne;
			while ((ligne=br.readLine())!=null){
				chaine+=ligne+"</br>";
			}
			br.close(); 
		}		
		catch (Exception e){
			System.out.println(e.toString());
		}
        return Utilitaire.getModelMapError(chaine);
	}
	@RequestMapping(value="/articles/create.action")
	public @ResponseBody Map<String,? extends Object> createarticles(@RequestParam Object data,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List d	=	ArticleManager.ajouterArticles(data);
				int total=d.size();
				return Utilitaire.getMap(d,total);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	
	@RequestMapping(value="/articles/update.action")
	public @ResponseBody Map<String,? extends Object> updatearticles(@RequestParam Object data,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List d	=	ArticleManager.modfierArticles(data);
				int total=d.size();
				return Utilitaire.getMap(d,total);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	
	@RequestMapping(value="/articles/delete.action")
	public @ResponseBody Map<String,? extends Object> deletearticles(@RequestParam Object data,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				if (ArticleManager.supprimerArticles(data))
					return Utilitaire.getMap("Les objets sont supprimer");
				else
					return Utilitaire.getModelMapError("Erreur de suppression");
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/familles/viewAll.action")
	public @ResponseBody Map<String,? extends Object> viewAllClient(Model model,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List data	=	ArticleManager.getAllFamilles();
				int total=data.size();
				return Utilitaire.getMap(data,1);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/articlestocks/view.action")
	public @ResponseBody Map<String,? extends Object> view(@RequestParam("start") int start, @RequestParam("limit") int limit, @RequestParam("idArticle") int idArticle,Model model,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List data	=	ArticleManager.getArticlestockByArticle(idArticle);
				int total=data.size();
				return Utilitaire.getMap(data,1);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/articletaxes/view.action")
	public @ResponseBody Map<String,? extends Object> view(@RequestParam("artCatCompta") int artCatCompta, @RequestParam("art") int idArticle,Model model,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List data	=	ArticleManager.getTaxeByArticleAndCatcompta(idArticle,artCatCompta);
				int total=data.size();
				return Utilitaire.getMap(data,1);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/articletaxes/create.action")
	public @ResponseBody Map<String,? extends Object> createarticletaxes(@RequestParam Object data,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List d	=	ArticleManager.ajouterArticletaxes(data);
				int total=d.size();
				return Utilitaire.getMap(d,total);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	
	@RequestMapping(value="/articletaxes/update.action")
	public @ResponseBody Map<String,? extends Object> updatearticletaxes(@RequestParam Object data,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List d	=	ArticleManager.modfierArticletaxes(data);
				int total=d.size();
				return Utilitaire.getMap(d,total);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	
	@RequestMapping(value="/articletaxes/delete.action")
	public @ResponseBody Map<String,? extends Object> deletearticletaxes(@RequestParam Object data,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				if (ArticleManager.supprimerArticletaxes(data))
					return Utilitaire.getMap("Les objets sont supprimer");
				else
					return Utilitaire.getModelMapError("Erreur de suppression");
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/depots/viewAll.action")
	public @ResponseBody Map<String,? extends Object> viewAllDepot(Model model,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List data	=	ArticleManager.getAllDepots();
				int total=data.size();
				return Utilitaire.getMap(data,1);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/uniteventes/viewAll.action")
	public @ResponseBody Map<String,? extends Object> viewAllUnitevente(Model model,HttpSession session) throws Exception {
		try{
			String sesUser=(String) session.getAttribute("sessionMERP");
			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
			if(u!= null)
			{
				List data	=	ArticleManager.getAllUnitevente();
				int total=data.size();
				return Utilitaire.getMap(data,1);
			}
			else
				return Utilitaire.getModelMapError("Merci de vous identifier");
		} catch (Exception e) {
			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
		}
	}
	@RequestMapping(value="/articles/print.action")
	public void imprimerArticle(Model model,HttpSession session,final HttpServletRequest req,HttpServletResponse response) throws Exception {
		
//		try{
//			String sesUser=(String) session.getAttribute("sessionMERP");
//			int idUser	=Integer.parseInt((String) (session.getAttribute("sessionIdMERP")==null?"0":session.getAttribute("sessionIdMERP")));
//			Utilisateur u=UtilisateurManager.getUserBySession(sesUser,idUser);
//			if(u!= null)
//			{
				String lien	=	ArticleManager.printAllArticle(req.getRealPath("/"));
				File f = new File(lien);
				ServletOutputStream stream = response.getOutputStream();
			    response.setContentType("application/pdf");

			    response.addHeader("Content-Disposition", "attachment; filename=devis0001.pdf");
			    response.setContentLength((int) f.length());
			    FileInputStream input = new FileInputStream(f);
			    BufferedInputStream buf = new BufferedInputStream(input);
			    int readBytes = 0;

			      while ((readBytes = buf.read()) != -1)
			        stream.write(readBytes);
				//System.out.println("Le fichier exist : "+f.exists());
				//return f;
//			}
//			else
//				return Utilitaire.getModelMapError("Merci de vous identifier");
//		} catch (Exception e) {
//			return Utilitaire.getModelMapError("Error retrieving from database : "+ e.getMessage());
//		}
	}
	
}
